﻿Public Class ctrPadrao

#Region " Campos de Instância "
    Private SQLCnn As New System.Data.SqlClient.SqlConnection
    Private SQLTr As System.Data.SqlClient.SqlTransaction

    Private alColecaoCodigoMensagemValidacao As New ArrayList
    Private alColecaoDescricaoMensagemValidacao As New ArrayList

    Public Enum eTiposRetorno
        tipoString = 0
        tipoInt = 1
        tipoBoolean = 2
    End Enum
#End Region

#Region "Propriedades públicas"

    Public ReadOnly Property retornaMensagensValidacao() As ArrayList
        Get
            Dim alRetorno As New ArrayList
            alRetorno.Add(Me.alColecaoCodigoMensagemValidacao)
            alRetorno.Add(Me.alColecaoDescricaoMensagemValidacao)
            Return alRetorno
        End Get
    End Property

    Public ReadOnly Property ControleTransacional() As Object
        Get
            Return Me.SQLTr
        End Get
    End Property

#End Region

#Region "Métodos privados"

    Private Sub iniciarVariaveis()

        Dim ioLerArquivo As IO.StreamReader
        Dim sStringConexao As String = ""
        Dim objSeguranca As New Persistencia.perSeguranca

        ioLerArquivo = New IO.StreamReader("SQL.DC", IO.FileMode.Open)
        sStringConexao = objSeguranca.descriptografar(ioLerArquivo.ReadLine)
        Me.SQLCnn.ConnectionString = sStringConexao

    End Sub

    Private Sub abrirConexao()
        Me.iniciarVariaveis()
        If Me.SQLTr Is Nothing Then
            If Me.SQLCnn.State = ConnectionState.Closed Then
                Me.SQLCnn.Open()
            End If
        End If
    End Sub

    Private Sub fecharConexao()
        If Me.SQLTr Is Nothing Then
            If Me.SQLCnn.State <> ConnectionState.Closed Then
                Me.SQLCnn.Close()
            End If
        End If
    End Sub


#End Region

#Region " Métodos Protegidos "

    Protected Sub iniciarControleTransacional()

        If Me.SQLTr Is Nothing Then
            Me.abrirConexao()
            Me.SQLTr = Me.SQLCnn.BeginTransaction()
        End If

    End Sub

    Protected Sub finalizarControleTransacional(ByVal iFinalizacaoTransacao As Persistencia.perPadrao.eFinalizacaoTransacao)

        If Not Me.SQLTr Is Nothing Then
            If iFinalizacaoTransacao = Persistencia.perPadrao.eFinalizacaoTransacao.Commit Then
                Me.SQLTr.Commit()
            Else
                Me.SQLTr.Rollback()
            End If
            Me.SQLTr = Nothing
            Me.fecharConexao()
        End If

    End Sub

    Protected Sub adicionarMensagensValidacao(ByVal iCodigo As Int32, _
                                          ByVal sMensagem As String)

        Me.alColecaoCodigoMensagemValidacao.Add(iCodigo)
        Me.alColecaoDescricaoMensagemValidacao.Add(sMensagem)

    End Sub

    Protected Sub limparMensagensValidacao()

        Me.alColecaoCodigoMensagemValidacao.Clear()
        Me.alColecaoDescricaoMensagemValidacao.Clear()

    End Sub

#End Region

End Class
